تفاوت بین ()services.Configure و services.AddOptions<T>().Bind هنگام لود کانفیگ در ASP.NET Core چیست؟
در پروژه ASP.NET Core WebApi خودم، میخوام پیکربندی را از appsettings.json در یک آبجکت هست بخونم.
appsettings.json دارای بخش پیکربندی زیر است:
{
"MySettings1": {
"Name": "John Smith",
"Age": "25",
}
}
من کلاس زیر ایحاد کردم که کعادل قایل کانفیگ هست
public class MySettings
{
public string Name { get; set; }
public int Age { get; set; }
}
من می توانم این کار را در متد ()Startup.ConfigureServices به صورت زیر انجام دهم:
services.Configure<MySettings>(configuration.GetSection("MySettings1"));
یا
services.AddOptions<MySettings>().Bind(configuration.GetSection("MySettings1"));
تفاوت این دو چیه؟ هر دوی آنها خوب کار می کنند و باهاشون میشه نمونه مناسب IOptions<MySettings> را در HomeController در هر دو مورد تزریق کرد.
هر دو روش کار یکسانی را انجام می دهند اما AddOptions بعداً آمد و امکان سفارشی سازی های بیشتری را فراهم می کند.
Configure (Action configureOptions) و OptionsBuilder.Configure (Action configureOptions) هر دو یک کار را انجام می دهند:
services.AddSingleton<IConfigureOptions<TOptions>>(new ConfigureNamedOptions<TOptions>(name, configureOptions));
OptionsBuilder.Bind (Iconfiguration config) در واقع Configure (IConfiguration config) را مستقیماً فراخوانی می کند، بنابراین آنها نیز معادل هستند.
بنابراین هر دو API قابل تعویض هستند. و خدمات مشابه را اراعه میدن. OptionsBuilder ا بعداً به وجود آمد تا کنترل بیشتری را با روشهای کاربردی مختلف فراهم کند. اما جایگزینی برای services.Configure نیست.